Геопанды против QGIS против значений площади ArcGIS

Dec 20 2020

Я вычисляю области KML в QGIS, ArcGIS и GeoPandas, и все они разные, мои результаты следующие:

Геопанды ArcGIS QGIS
29,3498 28,500084 25,651554

Исходный crs KML - 4326, поэтому в QGIS и ArcGIS сначала я перепроектирую KML (в ArcGIS сначала мне нужно сделать KML shp или функцией), а затем я вычисляю площадь.

Я проверил этот пост о той же проблеме, но с QGIS, и я вычислил площадь в QGIS, как они сказали, в ArcGIS я сделал нечто подобное, сначала я установил систему координат для фрейма данных, а затем повторно вычислил площадь с помощью GeoPandas I´ я делаю это:

import geopandas as gpd
import fiona

gpd.io.file.fiona.drvsupport.supported_drivers['KML'] = 'rw'
df = gpd.read_file('original_kml.kml', driver='KML')
gdf = df.to_crs('esri:102015')
gdf["area"] = gdf['geometry'].area/ 10**6

gdf.sum()

На всякий случай, если кто-то захочет проверить процесс, файлы здесь

Ответы

5 KadirŞahbaz Dec 20 2020 at 03:00

В GeoPandas вы преобразуете географическую систему координат шейп-файла в систему конформной проекции (сохраняющую угол, что означает, что она не сохраняет области). Ожидается, что будут получены разные значения площади. Фактически, в этом случае, если бы у вас было такое же значение в GeoPandas, то что-то было бы неправильно.

Когда дело доходит до QGIS и ArcGIS, в ваших данных много недопустимой геометрии. Если вы примените инструмент Dissolve в QGIS, вы это увидите. (Я предполагаю) ArcGIS и QGIS могут по-разному обрабатывать недопустимую геометрию, или они делают что-то, о чем мы не знаем, или что-то еще.

Мое предложение:

  • После изменения crs сохраните, gdfиспользуя gdf.to_file("new_file_path").
  • Затем откройте новый шейп-файл и сравните области.

Вот что у меня есть:

Geopandas: 29.3497 km²  
ArcGIS   : 29.349727079406 km²
QGIS     : 29.349727432 km²

Этот ответ не совсем объясняет, почему области разные. По крайней мере, вы избавитесь от проблем с разными областями.