2012-09-12 13 views
6

Estoy trabajando con la nueva Entity-Framework 5 usando el tipo de datos espaciales DbGeography como parte de mi modelo para almacenar en una instancia, un POINT y en otro ejemplo un POLYGON.Cómo corregir la orientación del anillo de polígono usando C# Entity Framework 5 DbGeography Spatial Data

Al configurar el valor de mi POLYGON, todo se guarda sin error, sin embargo, este es solo el caso si dibujo el polígono en el mapa en el sentido de las agujas del reloj. Si dibujo el POLGON en sentido contrario a las agujas del reloj, obtengo un error al nivel sql que indica que los datos son un tipo de geografía no válida.

Ahora, después de hacer mi propia investigación sobre el problema, parece provenir del tipo de datos geográficos que son bastante estrictos en términos de una orientación de anillo de polígonos. La solución más común parece ser crear el polígono como una geometría y luego convertirlo a un tipo de geografía.

Estoy buscando una solución en C# que se pueda aplicar a los datos antes de que se envíe a sql. Básicamente algo que corregirá automáticamente la orientación del anillo de una matriz de coordenadas.

He intentado detectar el error y luego reconstruir la cadena invirtiendo la matriz. Esto funciona en algunos casos pero, en primer lugar, no es confiable y, en segundo lugar, detectar el error es un gran golpe de rendimiento.

Gracias Chris

Respuesta

0

mismo problema en este caso, el uso de mapas de Bing v7 y su conjunto de herramientas de forma para dibujar polígonos que se encuentran aquí: http://bingmapsv7modules.codeplex.com/wikipage?title=Shape%20Toolbox%20Module

+0

Hola Adam, esto parece ser un comentario que debe añadirse como un comentario a la pregunta , no publicado como respuesta. Como eres nuevo aquí, debes activarte para ganar un poco más de reputación, para que puedas publicar un comentario. – VKen

2

que he tenido el fin de emitir mi mismo, y me lo resolvieron mediante el MakeValidGeographyFromText función de SQLSpatialTools lo utilicé la siguiente manera dentro de un SP:

SET @ge = dbo.MakeValidGeographyFromText(
    'POLYGON((' + @pois + '))', 4326); 

Dónde @pois es una cadena que contiene las coordenadas en un formato válido, pero rotación incorrecta.

no estoy seguro de lo fácil que es integrar con EF-5, pero veo dos formas:

  1. utilizar la función directamente desde C#, antes de llamar a EF con el polígono correcta.
  2. Instale sqlspatialtools en el servidor SQL y realice el procesamiento allí.
3

Hola tenía el mismo problema y lo resolvió mediante el uso de

var sqlGeography = SqlGeography.STGeomFromText().MakeValid() 
var invertedSqlGeography = sqlGeography.ReorientObject(); 

Para más detalles ver here

Cuestiones relacionadas