De estos, las características espaciales parecen tener el mayor impacto sobre el carácter de la aplicación. Además, las aplicaciones espaciales son menos conocidas y entendidos, por ejemplo, aplicaciones de e-commerce/entrada de pedidos o aplicaciones de inventario. Así que nuestra primera tarea fue intercambiar ideas sobre posibles aplicaciones. No dude en contribuir a este proyecto. NO soy un experto en funciones espaciales de SQL Server y no tengo fondo en este dominio de aplicación. En un sentido ésto es bueno: mi experiencia será semejante a la situación en que su jefe le entrega un proyecto para evaluar posibles usos de esta nueva tecnología cool que ella o él ha oído hablar. Pero mi experiencia definitivamente no simulará a la de un experto en el dominio espacial que está considerando la posibilidad de utilizar SQL Server. Así que siéntase libre de contribuir, comentar, criticar, agregar ideas creativas, etc.. Por favor no. Hasta ahora, este proyecto ha atravesado las siguientes fases:
Es probable que queremos incluir mapas en la interfaz de usuario. Hay otras posibles aplicaciones espaciales referenciados en internet, que no involucran mapas. Pero en estos casos, los tipos de datos de geometría aparecen en escenarios de tipo CAD/CAM como objetos en modelos; otro caso es que aparecen en diseños de construcción de edificios. Estas aplicaciones parecidas algo más especialización de aplicaciones orientadas al mapa, así que decidí excluir de consideración. En nuestra sesión de intercambio de ideas iniciales, se señaló que existe un gran cuerpo de fotografías en la web que fueron geo-codificada con datos de ubicación que pueden ser útiles utilizar. También fue el factor de "frescura" a considerar. Nuestra conclusión provisional inicial fue que idealmente podría implicar la aplicación de mapas y fotos.
Ya estamos creando una aplicación de muestra que los usuarios pueden instalar, y con que pueden experimentar, los datos que utiliza debe ser algo pequeño y públicamente disponibles de forma gratuita. También es probable que queremos que la aplicación utilice una base de datos preexistente, en lugar de crearlo por medio de un app EF estilo "Modelo Primero", y dejar que el app inicializa la base de datos. Otros opinaron que es probable que queríamos hacer una aplicación de estilo Código Primero porque ahí es dónde está el major interés del cliente, por lo que decidimos tentativamente. Código Primero por supuesto descarta el uso de funciones de valor de tabla.
Es probable que se seleccione un subconjunto de datos estadounidenses y probablemente en esta área local, para facilitar las pruebas, debido a nuestra familiaridad. Otra opción que mencionó era tomar fotos geocodificados y cargarlos en la app, mediante instrucciones SQL INSERT espaciales. Otra opción era obtener datos de algún tipo de servicio (Bing mapas por ejemplo, o el "Dallas" Data Mart).
Hablamos de un número de posibilidades de muestra. Sentíamos que queríamos consultas más complejas que sólo "Mostrar todas las tiendas dentro de x kilómetros de aquí", para que la aplicación podría ejercer algunas de las capacidades de SQL espacial.
Dada una trayectoria de vuelo del avión, mostrar todas las fotos dentro de una milla del punto en el camino donde estás actualmente. O mostrar todos los aumentos (con fotos) dentro de 10 millas de una ruta de viaje.
ADO.Blog del equipo neto contable sobre las características espaciales de CTP de June describe cómo instalar el software necesario. Prestar atención a la advertencia sobre sólo instalar este software en un equipo ajeno a la producción y si es necesario desinstalar, lea las instrucciones cuidadosamente. Había escuchado el primer bit de asesoramiento, pero no el segundo, y así tuve la deliciosa experiencia de re-paving mi máquina.
ADO.Blog del equipo de neta en espacial tiene código que un escenario común de demostraciones: "Mostrar todos los x que están dentro Y {millas | kilómetros | metros etc.} de mi ubicación actual ". Los contabilización código duro-códigos "mi ubicación" y sería cool a recoger desde su teléfono, pero por ahora, vamos a limitar el número de nuevas funciones que implementamos. Las consultas adicionales que puede que nos guste a ejecutar incluyen:
He mencionado fotos y mapas. Nos deberíamos investigar lo que está involucrado en:
Investigar estas características iniciales puede revelar otros factores no hemos considerado, más allá de la disponibilidad de datos, complejidad de api para acceder a los datos, etc..
¿Podemos empezar usando la app en el ADO.¿Blog del equipo de neta en espacial ? Su sección de código primero con una base de datos existente nos proporciona un número de puntos (hitos) dentro de la ciudad de Seattle, Washington. Nosotros podemos simular encontrar todos equis y kilómetros de una carretera creando líneas utilizando varios hitos como puntos y luego buscar todos hitos con x distancia de esa línea. Nosotros podemos simular encontrar todos x dentro de un área mediante la creación de un polígono conformado por líneas. Podemos crear consultas SQL compuestas de estos dos elementos. Podemos llamar a Bing mapas en un hito determinado. Encontrar todas las fotos que cumplan alguna condición requerirá algunas investigaciones sobre fuentes de fotos geo-codificada en la internet. O nos podríamos insertar esas fotos nosotros mismos y consulta contra ellos. Anuncios de vivienda puede requerir más investigación, pero, sin duda, podemos comenzar. Así que parece que podemos comenzar con nuestro estudio de factibilidad. A continuación, podemos evaluar los resultados y decidir sobre un prototipo real para implementar.
Primero vamos a crear una clase de líneas, lo que generará una tabla en la base de datos y, a continuación, se rellenarán con instancias de línea. Inicialmente estas instancias contendrá sólo dos puntos, pero al final te queremos crear líneas con varios puntos, para reflejar la situación real con carreteras reales. Permite así añadir algún código para el tutorial espacial, una nueva clase de líneas y una llamada al método de DbSet para las líneas. Las partes modificadas del código ahora parece esto:
public
class
Line
{
int
LineID {
get
;
set
; }
string
LineName {
DbGeography LineLocation {
}
SeattleLandmarksEntities : DbContext
DbSet<Person> People {
DbSet<Landmark> Landmarks {
DbSet<Line> Line {
A continuación que tenemos que crear una instancia de unas pocas líneas. Ser perezoso, sólo agregaré utilizando unos puntos ya están definidos como monumentos históricos. Este hecho resultó para ser más difícil de lo que inicialmente pensaba. Hay varios aspectos no intuitivos de la api de SQL Server espacial.
var landmark16 =
new
Landmark
LandmarkID = 16,
Address =
"1400 E. Galer Street"
,
Location = DbGeography.Parse(
"POINT(-122.31249 47.632342)"
),
LandmarkName =
"Volunteer Park"
};
// make a line
var line1 =
LineID = 1,
LineName =
"whatever"
LineLocation = DbGeography.Parse(
"LINESTRING(-122.31249 47.632342, -122.317575 47.665229)"
)
// Get landmarks within 2 miles of the line
var line = context.Line.Find(1);
var distanceInMiles2 = 2.5;
var distanceInMeters2 = distanceInMiles * 1609.344;
var landmarks2 =
from l
in
context.Landmarks
where l.Location.Distance(line.LineLocation) < distanceInMeters
select
Name = l.LandmarkName,
Address = l.Address
Console.WriteLine(
"\nLandmarks within "
+ distanceInMiles2 +
" mile(s) of "
+
line.LineName +
"'s location:"
);
foreach
(var loc
landmarks2)
"\t"
+ loc.Name +
" ("
+ loc.Address +
")"
static
void
getLandmarkDistancesFromGeography(SeattleLandmarksEntities context, DbGeography geo,
Name)
Distance = l.Location.Distance(geo) / 1609.344
"\nLandmark distances from "
Name );
+ loc.Distance +
getLandmarkDistancesFromGeography(context, person.Location, person.Name);
getLandmarkDistancesFromGeography(context, context.Landmarks.Find(15).Location, context.Landmarks.Find(15).LandmarkName);
getLandmarkDistancesFromGeography(context, context.Landmarks.Find(16).Location, context.Landmarks.Find(16).LandmarkName);
getLandmarkDistancesFromGeography(context, context.Line.Find(1).LineLocation, context.Line.Find(1).LineName);
var line2 =
LineID = 2,
"Queen Anne Through Downtown"
"LINESTRING(-122.349755 47.647494, -122.352842 47.6186, -122.334571 47.604009 )"
.......
context.Line.Add(line2);
private
FindLandmarksNearLine(SeattleLandmarksEntities context,
lineID,
double
DistanceInMiles)
var line = context.Line.Find(lineID);
var distanceInMeters2 = DistanceInMiles * 1609.344;
where l.Location.Distance(line.LineLocation) < distanceInMeters2
Distance = l.Location.Distance(line.LineLocation),
Limit = distanceInMeters2,
+ DistanceInMiles +
"'s location: (limit in meters: "
+ loc.Name
+ loc.Limit +
FindLandmarksNearLine(context, 1, 2.5);
FindLandmarksNearLine(context, 2, 0.5);
var landmark17 =
LandmarkID = 17,
""
"POINT(-122.34727 47.64677)"
"Aurora Bridge"
....
context.Landmarks.Add(landmark17);
Ahora cada segmento de la línea tiene hitos que consigue seleccionado y que no. Si estuviéramos en la etapa de hacer pruebas exhaustivas, intentamos agregar una línea con un gran número de segmentos, pero eso para más tarde.
Polígonos
Para comprobar los resultados del código anterior, pensé que sería bueno utilizar mapas de Bing para trazar todos los hitos y la línea (y polígono). Pasé una hora buscando en los mapas de Bing y satisface esto puede hacerse, pero no encontró una aplicación rápida que podría modificar para ello. Aprender de lo suficiente para estar satisfecho que es anhelado para utilizar mapas como una interfaz espacial, que era la meta en el punto en el proyecto.
He descubierto un blog discutir datos espaciales disponibles en la Oficina del censo nos . El autor realmente importan los datos para un condado específico de SQL Server y proporciona código de ejemplo, incluyendo:
Además, de boca he oído de numerosas otras fuentes de Gobierno de datos espaciales de dominio público. Por lo que otro objetivo de factibilidad está satisfecho: la libre disponibilidad de un subconjunto de datos espaciales "bonito".
Fotos siguen siendo investigados. Hay posibles cuestiones jurídicas involucradas que por lo menos deben ser investigados (ver problemas en Europa con fotos de street view de Google) y resuelto. Datos de ventas residenciales están un subconjunto más especializado que te investigamos más tarde.
Ed Price - MSFT edited Revision 3. Comment: Cleaning up the TOC