Sări la conținutul principal

Date spațiale

Acest ghid explică cum să lucrezi cu forme geografice, coordonate și buffere în API Qarta.

Sistem de coordonate

Toate coordonatele din Qarta trebuie să fie în format WGS84 (EPSG:4326):

  • Longitudine (Est-Vest): -180 la +180
  • Latitudine (Nord-Sud): -90 la +90
  • Format: [longitudine, latitudine] (nu [latitudine, longitudine])

Important: Observă ordinea: longitudine mai întâi, apoi latitudine. Aceasta este ordinea standard GeoJSON.

Exemple

New York City:        [-74.0060, 40.7128]
London, UK: [-0.1278, 51.5074]
Tokyo, Japan: [139.6917, 35.6895]
Sydney, Australia: [151.2093, -33.8688]

Forme GeoJSON

Qarta acceptă zone geografice ca obiecte GeoJSON Feature. Acestea definesc poligoane, puncte sau alte geometrii pentru interogări spațiale.

Formă poligon (cea mai frecventă)

Utilizează un poligon pentru a defini o zonă de interes:

{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[-74.0200, 40.7000],
[-74.0000, 40.7000],
[-74.0000, 40.7300],
[-74.0200, 40.7300],
[-74.0200, 40.7000]
]
]
},
"properties": {}
}

Puncte cheie:

  • coordinates este o matrice de inele (inel exterior + orificii opționale)
  • Fiecare inel este o matrice de coordonate [longitudine, latitudine]
  • Prima și ultima coordonată trebuie să fie aceleași (închide poligonul)
  • Minim 4 coordonate per inel (3 puncte unice + 1 punct de închidere)

MultiPolygon (zone multiple)

Definează zone multiple necontigue:

{
"type": "Feature",
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[
[[-74.0200, 40.7000], [-74.0000, 40.7000], [-74.0000, 40.7300], [-74.0200, 40.7300], [-74.0200, 40.7000]]
],
[
[[-73.9000, 40.7000], [-73.8800, 40.7000], [-73.8800, 40.7200], [-73.9000, 40.7200], [-73.9000, 40.7000]]
]
]
},
"properties": {}
}

Punct (locație singulară)

Pentru un singur punct (utilizat cu punctele finale buffer):

{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-74.0060, 40.7128]
},
"properties": {}
}

Buffere

Un buffer este o zonă circulară în jurul unuia sau mai multor puncte centrale. Formele buffer utilizează un format dedicat (nu GeoJSON standard) cu obiecte de coordonate {lat, long}.

Format formă buffer

{
"type": "circle",
"coordinates": [
{ "lat": 40.7128, "long": -74.0060 }
],
"bufferStyle": "circle"
}

Proprietăți:

ProprietateTipObligatoriuDescriere
typeșirDaTip formă (de ex., "circle")
coordinatesmatrice de {lat, long}DaPuncte centrale pentru buffer
bufferStyleșirNuIndiciu stil vizual (de ex., "circle")

Matricea radiuses (distanțe în metri) este specificată separat la nivelul cererii, nu în interiorul obiectului formei.

Coordonatele buffer utilizează {lat, long} — nu ordinea GeoJSON

Formele buffer utilizează latitudine mai întâi în câmpurile de obiecte numite ({ "lat": ..., "long": ... }). Aceasta este diferită de coordonatele poligonului GeoJSON care utilizează ordinea matricei [longitudine, latitudine].

Exemple buffer

Rază unică (1 milă):

{
"shape": {
"type": "circle",
"coordinates": [{ "lat": 40.7128, "long": -74.0060 }]
},
"radiuses": [1609]
}

Raze multiple (inele concentrice):

{
"shape": {
"type": "circle",
"coordinates": [{ "lat": 40.7128, "long": -74.0060 }]
},
"radiuses": [1000, 5000, 10000, 20000]
}

Utilizarea formelor în cererile API

Puncte finale selecție

Utilizează forme cu puncte finale "selecție" pentru a găsi date în o zonă:

{
"source": "portfolio_01",
"shape": {
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[[-74.0200, 40.7000], [-74.0000, 40.7000], [-74.0000, 40.7300], [-74.0200, 40.7300], [-74.0200, 40.7000]]]
},
"properties": {}
},
"filters": [{"field": "property_type", "value": "residential"}],
"properties": ["name", "value"]
}

Puncte finale buffer

Utilizează forme buffer cu puncte finale "selecție-buffer":

{
"source": "portfolio_01",
"shape": {
"type": "circle",
"coordinates": [{ "lat": 40.7128, "long": -74.0060 }]
},
"radiuses": [1000, 5000],
"filters": [{"field": "property_type", "value": "residential"}]
}

Precizie coordonate

Utilizează precizie corespunzătoare pentru cazul tău de utilizare:

PrecizieZecimaleAcuratețe
1.01~111 km
0.11~11 km
0.012~1.1 km
0.0013~111 m
0.00014~11 m
0.000015~1.1 m

Greșeli comune

❌ Coordonate inversate

// GREȘIT - latitudine mai întâi
"coordinates": [40.7128, -74.0060]

// CORECT - longitudine mai întâi
"coordinates": [-74.0060, 40.7128]

❌ Coordonată de închidere lipsă

// GREȘIT - poligon nu este închis
"coordinates": [[[-74.0200, 40.7000], [-74.0000, 40.7000], [-74.0000, 40.7300], [-74.0200, 40.7300]]]

// CORECT - prima și ultima coordonate sunt aceleași
"coordinates": [[[-74.0200, 40.7000], [-74.0000, 40.7000], [-74.0000, 40.7300], [-74.0200, 40.7300], [-74.0200, 40.7000]]]

❌ Sistem de referință de coordonate greșit

// GREȘIT - coordonate UTM
"coordinates": [475703, 4505727]

// CORECT - WGS84/EPSG:4326
"coordinates": [-74.0060, 40.7128]

Instrumente pentru crearea formelor

Web-based

Programatic

JavaScript/Leaflet:

const shape = {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [[[lng1, lat1], [lng2, lat2], [lng3, lat3], [lng1, lat1]]]
},
properties: {}
};

Validare forme

Înainte de a trimite forme la Qarta, validează-le:

Validator online: https://geojson.io/

Python:

from shapely.geometry import shape

def is_valid_geojson(feature):
try:
geom = shape(feature['geometry'])
return geom.is_valid
except:
return False

Considerații de performanță

  • Forme mai mici au performanță mai bună decât poligoane foarte mari
  • Fewer radiuses în buffere returnează rezultate mai repede
  • Coordonate precise nu afectează performanța (4-5 zecimale este bine)
  • Poligoanele complexe cu multe vârfuri pot fi mai lente

Mesaje de eroare

"Invalid shape geometry"

Cauză: GeoJSON malformat

Soluție:

  • Validează sintaxa JSON cu validator JSON
  • Verifică poligonul este închis (primul = ultima coordonată)
  • Verifică coordonatele sunt [longitudine, latitudine]

"403 Forbidden" pe parametrul shape

Cauză: Interval de coordonate nevalid sau tip geometrie

Soluție:

  • Verifică coordonatele sunt în interval WGS84 (-180 la 180 longitudine, -90 la 90 latitudine)
  • Verifică utilizezi tip geometrie suportată (Polygon, MultiPolygon, Point)
  • Asigură-te că toate coordonatele interioare sunt matrice corect imbricată

Pași următori