Frage

Ich habe die folgenden beiden Tabellen: -

GeoShapes

  • GeoShapeId INT IDENTITY
  • Name VARCHAR (100)
  • Shapefile GEOGRAPHY [Dies ist eine geschlossene Polygon von Lat / Longs]

CrimeLocations

  • CrimeLocationId INT IDENTITY
  • LatLong GEOGRAPHY [dies ist ein Lat / Long Point]

Jetzt habe ich um 10K GeoShape Ergebnisse und um 500CrimeLocations.

Ich versuche, herauszufinden, welche Geoshapes alle 500 Verbrechen lat / long Punkte existieren innerhalb von.

:( Ich einfach nicht get it! Ich habe versucht, eine STIntersects auf einer Unterabfrage zu tun, aber das hat nicht funktioniert. Irgendwelche Vorschläge?

Prost!

EDIT. 1: Ich kann keine GEOMETRY Funktionen verwenden .. da (wie oben angegeben) diese alle Geographie Typen

EDIT 2: Ich weiß, wie STContains und STIntersects zu verwenden. Bitte geben Sie keine grundlegende Beispiele dafür. Ich bin neugierig auf eine komplexe Abfrage mit meiner Tabellenstruktur zu tun, vor.

War es hilfreich?

Lösung

In Bezug auf Ihre ‚Änderungen‘, ist es nicht oft sehen Sie eine Frage, „bitte nicht bieten ...“ enthält. Sicherlich jedes Bisschen hilft? Besonders eigentlich uns, da Sie nicht gezeigt haben, was Sie Sie wissen über STContains oder STIntersects (oder Filter() was das betrifft) ...

Wie auch immer, ich hatte eine Datenbank von zipcodes und storelocations handlich, so umbenannt ich die Tabellen / Spalten Sie zu passen (ich habe dann 6535 CrimeLocatoins und 3285 GeoShapes). Ich nehme an, Sie es gedacht habe jetzt - aber jemand anderes finden könnte dies nützlich ...

Die folgende Abfrage gibt die Anzahl der CrimeLocations in jedem GeoShapes.ShapeFile

SELECT G.Name, COUNT(CL.Id)
FROM   GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
ORDER BY 2 DESC

Es dauert Alter (wie 20 Minuten), weil ich nicht eingerichtet haben keine geospatial Indizes und meine Shape-Dateien haben einen hohen Punktzahl, aber es erfolgreich ausgeführt werden. Wenn ich die Ergebnisse beschränken wollte, wie Sie vorschlagen:

SELECT G.Name, COUNT(CL.Id)
FROM   GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
HAVING COUNT(CL.Id) = 500

Natürlich wollen Sie nicht die Nummer 500 codieren -., So dass Sie eine COUNT(*) FROM CrimeLocations Unterabfrage hinzufügen könnten, oder eine Variable mit dem gesamten von einer separaten Abfrage

Ist das komplex genug?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top