Geopandas so với QGIS và giá trị khu vực ArcGIS
Tôi đang tính toán các khu vực của KML trong QGIS, ArcGIS và GeoPandas và tất cả sau đó đều khác nhau, kết quả của tôi là:
| Geopandas | ArcGIS | QGIS |
|---|---|---|
| 29.3498 | 28.500084 | 25,651554 |
Crs ban đầu của KML là 4326, vì vậy trong QGIS và ArcGIS trước tiên, tôi chiếu lại KML (trong ArcGIS, trước tiên tôi phải đặt KML thành một shp hoặc một tính năng) và sau đó tôi tính diện tích.
Tôi đã kiểm tra bài đăng này về cùng một vấn đề nhưng với QGIS và tôi tính diện tích trong QGIS như họ đã nói, trong ArcGIS, tôi đã làm một việc tương tự, trước tiên tôi đặt hệ tọa độ vào khung dữ liệu và sau đó tính toán lại diện tích, với GeoPandas Tôi tôi đang làm điều này:
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()
Chỉ trong trường hợp ai đó muốn kiểm tra quá trình, các tệp ở đây
Trả lời
Trong GeoPandas, bạn chuyển đổi hệ tọa độ địa lý của shapefile thành một hệ thống được chiếu theo phương pháp tuân thủ (bảo toàn góc, có nghĩa là nó không bảo toàn các khu vực). Nó dự kiến sẽ nhận được các giá trị diện tích khác nhau. Trên thực tế, trong trường hợp này, nếu bạn có cùng giá trị trong GeoPandas, thì sẽ có điều gì đó không ổn.
Khi nói đến QGIS và ArcGIS, có nhiều hình không hợp lệ trong dữ liệu của bạn. Nếu bạn áp dụng công cụ Dissolve trong QGIS, bạn sẽ thấy điều đó. (Giả định của tôi) ArcGIS và QGIS có thể đang xử lý các hình không hợp lệ theo cách khác hoặc họ đang làm điều gì đó mà chúng tôi không biết hoặc điều gì đó khác.
Đề xuất của tôi:
- Sau khi thay đổi crs, hãy lưu
gdfbằng cách sử dụnggdf.to_file("new_file_path"). - Sau đó, mở shapefile mới và so sánh các khu vực.
Đây là những gì tôi có:
Geopandas: 29.3497 km²
ArcGIS : 29.349727079406 km²
QGIS : 29.349727432 km²
Câu trả lời này không giải thích hoàn hảo tại sao các khu vực lại khác nhau. Ít nhất, bạn thoát khỏi vấn đề khu vực khác nhau.