J'ai un ensemble d'objets ligne et polygone (type SqlGeometry) et un objet point (type SqlGeometry). Comment pouvons-nous trouver le point le plus proche sur chaque ligne de l'objet ponctuel donné? Y a-t-il une API pour faire cette opération?comment obtenir le point le plus proche sur un objet SqlGeometry à partir d'un autre objet SqlGeometry?
Répondre
Je ne suis pas sûr si cela est possible directement dans SQL Server 2008:
http://social.msdn.microsoft.com/Forums/en/sqlspatial/thread/cb094fb8-07ba-4219-8d3d-572874c271b5
La solution proposée dans ce thread est:
declare @g geometry = 'LINESTRING(0 0, 10 10)'
declare @h geometry = 'POINT(0 10)'
select @h.STBuffer(@h.STDistance(@g)).STIntersection(@g).ToString()
Sinon, vous auriez à écrire un script pour lire la géométrie de votre base de données et utiliser des bibliothèques spatiales séparées.
pour l'objet de géographie, il était nécessaire d'ajouter un tampon supplémentaire de 0,1 mètre et prendre le premier point du résultat. Sinon, il produisait une collection de géométrie vide. @ h.STBuffer (@ h.STDistance (@g) + 0.1) .SInterection (@g) .STFirstPoint(). ToString() – malay
Si vous êtes réellement intéressé par la recherche du point le plus proche sur la ligne (autrement dit un nœud), vous pouvez transformer chaque ligne en un ensemble de points ayant la même ligne. Puis interrogez le plus proche et calculez la distance.
Si au contraire, vous essayez de calco la distance d'un point à la plus proche ligne - STDistance http://msdn.microsoft.com/en-us/library/bb933808.aspx Je suppose que le problème que les autres adresses de réponse est ce qu'il faut mettre dans votre clause where mais vous pouvez utiliser STDistance pour spécifier un distance au-dessus que vous ne vous inquiétez pas, comme
où pointGeom.stdistance (lineGeom) < « distance que vous aimez »
Voici un échantillon présentant des solutions possibles en utilisant SqlGeometry et C#, pas SQL Server est requise :
using System;
using Microsoft.SqlServer.Types;
namespace MySqlGeometryTest
{
class ReportNearestPointTest
{
static void ReportNearestPoint(string wktPoint, string wktGeom)
{
SqlGeometry point = SqlGeometry.Parse(wktPoint);
SqlGeometry geom = SqlGeometry.Parse(wktGeom);
double distance = point.STDistance(geom).Value;
SqlGeometry pointBuffer = point.STBuffer(distance);
SqlGeometry pointResult = pointBuffer.STIntersection(geom);
string wktResult = new string(pointResult.STAsText().Value);
Console.WriteLine(wktResult);
}
static void Main(string[] args)
{
ReportNearestPoint("POINT(10 10)", "MULTIPOINT (80 70, 20 20, 200 170, 140 120)");
ReportNearestPoint("POINT(110 200)", "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)");
ReportNearestPoint("POINT(0 0)", "POLYGON((10 20, 10 10, 20 10, 20 20, 10 20))");
ReportNearestPoint("POINT(70 170)", "POLYGON ((110 230, 80 160, 20 160, 20 20, 200 20, 200 160, 140 160, 110 230))");
}
}
}
La sortie du programme:
POINT (20 20)
POINT (160 150)
POINT (10 10)
POINT (70 160)
- 1. objet le plus proche de CGPoint
- 2. Comment obtenir un objet à partir d'un point de travail?
- 3. Implémentation itérative de point le plus proche
- 4. comment obtenir le point le plus proche d'un point dans un tableau de points?
- 5. En utilisant JTS, comment trouver le point le plus proche sur la limite d'un polygone à partir d'un point extérieur?
- 6. Comment définir un objet comme le type d'un autre objet?
- 7. Comment trouvez-vous le point le plus proche d'une ligne sur un réseau géométrique dans VBA?
- 8. Comment trouver quel rectangle est le plus proche d'un point
- 9. Aligner sur le marqueur le plus proche
- 10. Le point le plus proche sur un chemin vers un point, ou: Cher cible, désolé tu m'as manqué
- 11. connecter un point à chaque point le plus proche entre les différents points
- 12. Comment trouver l'arbre le plus proche d'un autre arbre?
- 13. Comment obtenir le nom de répertoire le plus proche
- 14. comment accéder à un objet à partir d'une autre fonction
- 15. Comment arrondir à 0.5 le plus proche?
- 16. Rendre un objet accessible à un seul autre objet dans le même assemblage?
- 17. objet append à un autre objet en php
- 18. Le moyen le plus rapide de trouver le point le plus proche d'un point donné en 3D, en Python
- 19. obtenir le résultat le plus proche dans IFNULL
- 20. jQuery le plus proche();
- 21. Comment obtenir un objet délégué à partir d'un EventInfo?
- 22. Trouver le point le plus proche d'un ensemble de points dans le plan
- 23. Comment créer un objet Bitmap à partir d'un objet Graphics?
- 24. Obtenir la clé d'un objet sur un objet Collection
- 25. comment obtenir une action d'un point à un autre point?
- 26. Trimestre le plus proche
- 27. Mimique les modifications de propriété/liste sur un objet sur un autre objet
- 28. Javascript DOM - Obtenir le nœud le plus proche avec tagName
- 29. SQL Server Géographie type de données le plus proche point sur la ligne
- 30. faire un objet égal à un autre objet
BTW, cette question est sur API C#, mais la réponse acceptée utilise SQL Server. Très confus à tout lecteur qui cherche des questions et réponses similaires. Suggestion: obtenez la question/tags directement. – mloskot