2010-07-27 20 views
5

Comment calculer l'aire d'un polygone stocké dans une base de données MySql? Les points des polygones sont lat longs. Donc, les degrés et les minutes semblent causer un problème.Comment calculer la surface d'un polygone dans une base de données MySQL lorsque les points du polygone sont lat Longs?

J'ai essayé:

SELECT AREA(my_polygon) 
FROM `my_table` 
WHERE name = 'Newport' 

Parce que, les points sont longs lat, j'obtenir des résultats étranges.

(Je ne peux pas passer à Postgre). Y a-t-il un moyen de le faire dans MySQL? J'aimerais obtenir les résultats en mètres carrés ou en kilomètres carrés ou en kilomètres carrés - tout cela serait bien.

+0

Utilisez-vous/avez-vous consulté les fonctionnalités SIG de MySQL? http://dev.mysql.com/doc/refman/5.0/fr/spatial-extensions.html – relet

+0

Salut relet, Merci pour votre message. Oui, j'utilise des extensions spatiales MySQL. Les données sont stockées sous forme de polygones MySQL. – Laxmidi

+0

Donc vous dites AREA (my_polygon) ne fonctionne pas parce que vous avez [lat longs] au lieu de [long lats]? Le format natif devrait être [Long Lat] et je ne sais pas si cela affecterait les calculs de zone. Dans mon cas AREA (poly) a bien fonctionné. – derickito

Répondre

3

Vous devez transformer ces lats et longs en un système de coordonnées plus approprié.

Puisque la Terre est une sphère, vous parlez de calculer une zone en coordonnées sphériques.

Les docs disent que le MySQL "AREA" function prend un polygone comme entrée. Je dirais que si vous voulez une surface de quelque chose comme des miles carrés, vous devez convertir vos coordonnées lat/long en coordonnées de surface équivalentes (x, y) avec les bonnes unités (par exemple, miles). Ensuite, passez les dans la fonction AREA.

This link suggère que quelqu'un d'autre a eu ce problème et l'a résolu.

+0

Salut duffymo, Merci pour le conseil. Je vais devoir étudier le lien que vous avez fourni. – Laxmidi

+0

La fonction area fait tous ses calculs de manière cartésienne. –

+1

C'est pourquoi j'ai dit "convertissez vos coordonnées lat/long en coordonnées de surface équivalentes (x, y) avec les unités de droite (par exemple miles), puis passez-les dans la fonction AREA." Si vous m'avez rejeté parce que vous n'avez pas lu ma réponse, alors honte à vous. Je ne sais pas ce que vous avez fait pour mériter le titre de «docteur», mais votre compréhension en lecture a besoin d'un peu de travail. – duffymo