Ok, aquí está mi sugerencia sobre cómo hacer esto. Dependiendo de su situación, usted puede tener ESRI MapIt, que parece hacer el trabajo duro por usted. Miré en su sitio, y parece que no está disponible ya. Si la tienes, lo intente. Si no, aquí está mi versión más larga, que @kes se alude en el comentario.
Crear una forma de acceder a los datos en el Servidor SQL server. Hay 2 formas principales de hacer esto.
1: Usted puede configurar la conexión a través del Sistema.Datos de espacio de nombres. Hay un par de opciones para conectarse así que mira a través de la documentación y elige uno que te guste. El truco aquí va a ser la configuración de su cadena de conexión. Hay opciones para hacer la Autenticación de Windows con SQL Server o de la tienda (o pedir) un nombre de usuario y contraseña en la máquina cliente.
2: Usted puede usar algo como el QueryTask
o algo así HTTPWebRequest para generar una solicitud a un API web de configurar que va a continuación, tomar la información de su Servidor SQL server y enviarlo para su aplicación. Esto se puede hacer en lugar de una conexión directa desde su aplicación para el Servidor SQL server. Esto significaría el establecimiento de un camino para que su API para enviar información (por ejemplo, cadena JSON).
En cualquier caso, usted debe proporcionar también una manera de obtener su información de la geometría de su aplicación en un formato utilizable. Tiendo a preferir el conocido texto (WKT). Es fácil de leer en la solución de problemas, pero puede terminar encima de conseguir a largo dependiendo de su sistema de coordenadas y cómo muchos puntos de una característica particular que tiene. Usted puede elegir cualquiera que sea la forma de obtener la geometría y analizarlo en la aplicación que desea. Es solo mi preferencia.
Mi sugerencia sería la de establecer un procedimiento almacenado que devuelva este valor a método de solicitud. Esto también elimina la necesidad de ejecutar directamente SQL en SQL Server (por ejemplo, SELECT * FROM MyTable
). En caso de que cambien las cosas, es más fácil de actualizar el procedimiento almacenado que sería aplicaciones de cliente.
Ahora viene la parte difícil. Después de que usted haya hecho su pedido, usted tendrá un poco de la manera en que los datos viene a la aplicación cliente. Usted tendrá que establecer una forma de analizar esa información en algo. System.Data
normalmente devolverá un DataSet
o DataTable
, que tienen filas y puede ser iterado. La web de la versión API depende de cómo se configura, pero generalmente, sería volver como una cadena JSON que puede utilizar el JavaScriptSerializerClass o JSON.Net para deserializar un objeto (tendrás que definir una clase para almacenar los datos). A continuación, deberá tomar los datos, ya sea como es, o definir una clase para almacenar la información de una forma más viable manera.
Esta parte va a generar los gráficos de la información. Debe seguir la información de la API de Gráficos para ArcGIS for WPF. Tendrá que tomar las geometrías que regresó de su Servidor SQL server para generar los gráficos. Sugiero leer sobre la Adición de MapTips parte de la documentación para agregar información a sus gráficos. Usted podría también hacer las cosas de manera un poco diferente y consulta en la demanda. Básicamente, se agrega algún tipo de controlador de eventos que vigila donde está el ratón o un evento click. Una vez activado, ya sea para tomar un identificador único de la gráfica que lo desencadenó (necesidades se relacionan con el SQL Server), o va a tomar la posición del ratón (en el mapa de coordenadas), y va a hacer otra consulta (en el método de antes, System.Data
vs API) para obtener la información.
La idea básica de este es que puedes crear tus propios gráficos de la capa. La aplicación va a actuar como intérprete a los datos de SQL Server, y que sólo se analiza y los convierte en una geometría de objetos de la API de ArcGIS para WPF puede leer y procesar. Usted todavía necesita para decidir un esquema de representación de los datos, lo que potencialmente puede ser integrado en SQL Server como otra tabla que se presenta unido a su consulta espacial, e interpretado por la aplicación.
Esto puede complicarse si desea agregar capacidades de edición de los datos o de cualquier otra más que complicar las cosas como espacial de la consulta.
El flujo básico de datos en cualquiera de estas es como este:
SQL Server (contiene datos) -> Procedimiento Almacenado (obtener datos desde el Servidor) -> Llamada de Procedimiento (API/Sistema.De datos) -> Aplicación (hacer petición...analizar la respuesta) -> Render en el Mapa (interpretar la respuesta)
Descargo de responsabilidad...Esto es para los sitios web, pero debe tener traducciones para su aplicación WPF
ASP.NET y WPF tiene un montón de cruces. Me parece que es relativamente fácil de traducir de hacer las cosas una a la otra gracias a el .NET framework. Así que en lugar de donde hago las cosas web (campo oculto, JS matriz, etc), probablemente puede pasar por alto todo eso. Además, para el Terraformer proyecto que mencionas, hay probablemente algunos .NETO de los proyectos que funcionan de una manera similar. Estoy seguro de que hay algunos proyectos de código abierto que puede lidiar con topológico/coordinar las cuestiones .NETO y de ESRI tiene probablemente un par de clases del espacio de nombres.
El uso de ASP y Entity Framework
He creado un sitio con esta idea. Sin publicar todo el código, aquí es el proceso básico que se utiliza para crear mi punto de gráficos.
1: Ya que estoy tratando con lat/long puntos, tengo mi tabla de configuración utilizando el Geography
tipo espacial en lugar de Geometry
.
2: En mi ASP.Net la página...he utilizado el Entity Framework Code First enfoque y adjunto mi base de datos a la Page_Init
evento para obtener la información de mi base de datos.
3: Ya que los datos se tira a cabo utilizando un LINQ
consulta, yo bucle a través de los resultados de la consulta y crear objetos de una clase nueva (cuyas propiedades se modelan después de mis datos de campos de la tabla) y almacenarlos en una colección. Esto es adicional e innecesario, pero yo quiero que existe en el caso de ampliar la funcionalidad.
4: puedo tomar todos los objetos y crear una lista delimitada cadena que se encuentra en JSON
formulario. Luego tomar la cuerda y lo pasamos como value
parte de mi <asp:HiddenField/>
que tengo en mi página web.
5: Porque todo lo que sucede antes de que mi página se representa, cuando la página loaded
dispara el evento (por ejemplo, $(document).ready()
, domReady
), la información está ahí. Primero mi mapa script que hace es cargar los datos desde el control oculto en un JS de la matriz.
6: Después de que me inicializar mi objeto de mapa, me bucle a través de la matriz y crear Graphic
objetos. Yo uso la lat/long para crear el punto, se debe asignar la correcta SpatialReference
(SRID: 4326), y darle un renderer (simple forma de diamante). A partir de ahí, crear un espacio en blanco InfoPopup/InfoTemplate/etc
y acaba de pasar en la Name
valor para el encabezado. Para el Graphic
attr
de la propiedad, que se pasa el objeto JSON a partir de mi matriz. De manera que la ventana que aparece al hacer clic se mostrará los pares clave-valor (por ejemplo, Name = Blah Place
).
Así que, quería probar mi concepto para ver si era factible para armar un mapa como este sin necesidad de un Server de ESRI/GeoServer/MapServer en la mezcla. Para ampliar aún más en polilíneas y polígonos, creo que me gustaría tratar de incorporar el Terraformer proyecto para interpretar bien conocido binario Geometry
objetos de mi SQL Server en lugar de tratar de analizar manualmente geometrías complejas.
Actualización Web
Desde que se me fue un poco un poco en la web del lado de esto, quise actualizar mi respuesta para aquellos que pueden estar buscando para hacer esto a través de la ESRI API de JS o una API similar. Me topé con esta biblioteca, de la Peatonal, que promete convertir WKT a los objetos de la geometría de las Api como ESRI, Google, Folleto, JSON, etc. Creo que esto puede ser muy útil para los desarrolladores web que puede tropezar con esta pregunta.