Suite

Trouver les détails de l'emplacement dans le tampon circulaire


Je me demande comment je ferais pour que cela fonctionne.

J'ai une table avec des données de localisation (lat, long, homevalue) dans SQL Server 2008. Étant donné un lat long say (32.113, -81.3225), je veux dessiner un cercle de rayon de 50 milles et obtenir le nombre d'emplacements et la valeur totale de la maison dans le tampon circulaire.

Merci Vic


Mapoholic,

Merci pour votre réponse. Si je vous comprends bien, vous utilisez la "forme" comme attribut pour effectuer stintersect et stbuffer sur la table de localisation. Mes limites sont que j'ai la table de localisation qui n'a que la valeur lat, longue, de la maison en dollars. J'ai besoin de dessiner indépendamment un cercle basé sur le lat long donné, ce qui si je le fais bien serait comme ça

DÉCLARER @Résultat géographie SELECT @Résultat = géographie::Point(32.113, -81.3225,4326); sélectionnez @Result.STBuffer (10000);

et ensuite je dois REJOINDRE ou utiliser une méthode pour vérifier si les lat longs dans la table d'emplacement sont dans le @Result.STBuffer (10000). Des idées?

Merci encore

victime


STBuffer et STIntersects sont les fonctions que vous voulez je pense. Voici un exemple d'obtention des enregistrements de localisation dans une zone tampon de 10 m autour du point :

sélectionnez * à partir des emplacements où shape.STIntersects(geography::STPointFromText('POINT(32.113, -81.3225)', 4326).STBuffer(10))=1

Où 4326 est le SRID (en supposant que les données sont dans WGS84) et 'shape' est le nom de la colonne spatiale


Vous pouvez utiliser un calcul de distance Great Circle. Pour utiliser les kilomètres au lieu des miles, utilisez 6371 au lieu de 3959 ci-dessous.

déclarer @lat1 comme flottant, @lon1 comme flottant, @DistanceFilter comme flottant set @lat1 = 32.113 set @lon1 = -81.3225 set @DistanceFilter = 50 select count(*) count_properties, sum(homevalue) sum_homevalue from [table] où ACOS( COS(RADIANS([email protected]))*COS(RADIANS(90-latitude)) +SIN(RADIANS([email protected])) *SIN(RADIANS(90-latitude))*COS(RADIANS(@lon1-longitude) )))*3959 <= @DistanceFilter