是否将SimpleGeo Places GeoJSON文件转换为shapefile?


15

SimpleGeo最近免费提供了其“位置”数据集,这是很棒的,因为现在我们可以将其用于自己的目的,甚至可以离线使用。因此,我开始下载2GB的数据集,其中包含GeoJSON格式的压缩国家(地区)文件。

这是我的问题开始的地方...当我尝试将国家(地区)文件(* .geojson)直接加载到QGIS或什至使用ogr2​​ogr将其转换为shapefile时,最终都只有1点功能。

显然,这些文件中有更多数据我无法“查看”或检索,所以我在做什么错呢?有人可以向我提供任何有关如何将这些文件转换为可用的GIS功能的建议吗?

更新的问题:我真的想将geojson文件转换为shapefile(或类似的标准GIS格式),以便在桌面GIS软件中使用。

SimpleGeo博客的摘录,2011年8月1日

“ SimpleGeo的CC0 Places数据集现在可以免费下载。如果您想获得涵盖63个国家/地区的2100万个POI,我们准备将其移交给一个文件。文件大约是2GB .zip格式,并记住,与CC0许可,该数据成为你的-自由和明确-做任何你想要的,我们希望你做的事真棒用它! 您可以点击此处立即下载它。

更新: 2012年1月12日:SimpleGeo在2011年10月被Urban Airship收购后,Urban Aiship说:“在接下来的几个月内,减少[SimpleGeo]的位置,上下文和存储的当前版本的可用性。” ...正式拔出插头的目标日期为2012年3月31日。链接


3
+1。有时听SimpleGeo的Matt Galligan说,位置数据是事实,应该免费提供。应该出售的是环境。很高兴看到“他们”的意思。也渴望利用这些数据。
埃里克(Erick)

Answers:


10

尝试将功能包装在以下内容中:

{"type":"FeatureCollection","features":[ 

****ALL THE DATA HERE -- COMMA SEPARATED****

]}

并用逗号分隔每个功能。

例如,这是IE数据集中的前两个功能:

{"geometry": {"type": "Point", "coordinates": [-6.422587, 53.293363]}, "type": "Feature", "id": "SG_41u80gC4971D4Gc0Fv1p8q_53.293363_-6.422587@1308163237", "properties": {"website": "http://www.buongiorno.com", "city": "Dublin", "name": "Buongiorno", "tags": ["mobile", "vas", "community", "social-networking", "connected-devices", "android", "tablets", "smartphones"], "country": "IE", "classifiers": [{"category": "Professional", "type": "Services", "subcategory": "Computer Services"}], "href": "http://api.simplegeo.com/1.0/features/SG_41u80gC4971D4Gc0Fv1p8q_53.293363_-6.422587@1308163237.json", "address": "Lake Drive City West Digital Park", "owner": "simplegeo", "postcode": "3050"}}
{"geometry": {"type": "Point", "coordinates": [-6.250848, 53.339347]}, "type": "Feature", "id": "SG_1dnWbWIg8hX3VyfUKIDRz9_53.339347_-6.250848@1308163237", "properties": {"website": "http://www.simchronise.com", "city": "Dublin", "name": "SIMchronise", "tags": ["mobile-solutions", "mobile-data", "data-synchronisation", "mobile-security", "backup", "restore", "mobile-contacts", "web-2.0-addressbook", "phonebackup"], "country": "IE", "classifiers": [{"category": "Professional", "type": "Services", "subcategory": "Computer Services"}], "href": "http://api.simplegeo.com/1.0/features/SG_1dnWbWIg8hX3VyfUKIDRz9_53.339347_-6.250848@1308163237.json", "address": "78 Merrion Square", "owner": "simplegeo", "postcode": "Dublin2"}}

...,这里是GeoJSON FeatureCollection:

{"type":"FeatureCollection","features":[ 
{"geometry": {"type": "Point", "coordinates": [-6.422587, 53.293363]}, "type": "Feature", "id": "SG_41u80gC4971D4Gc0Fv1p8q_53.293363_-6.422587@1308163237", "properties": {"website": "http://www.buongiorno.com", "city": "Dublin", "name": "Buongiorno", "tags": ["mobile", "vas", "community", "social-networking", "connected-devices", "android", "tablets", "smartphones"], "country": "IE", "classifiers": [{"category": "Professional", "type": "Services", "subcategory": "Computer Services"}], "href": "http://api.simplegeo.com/1.0/features/SG_41u80gC4971D4Gc0Fv1p8q_53.293363_-6.422587@1308163237.json", "address": "Lake Drive City West Digital Park", "owner": "simplegeo", "postcode": "3050"}},
{"geometry": {"type": "Point", "coordinates": [-6.250848, 53.339347]}, "type": "Feature", "id": "SG_1dnWbWIg8hX3VyfUKIDRz9_53.339347_-6.250848@1308163237", "properties": {"website": "http://www.simchronise.com", "city": "Dublin", "name": "SIMchronise", "tags": ["mobile-solutions", "mobile-data", "data-synchronisation", "mobile-security", "backup", "restore", "mobile-contacts", "web-2.0-addressbook", "phonebackup"], "country": "IE", "classifiers": [{"category": "Professional", "type": "Services", "subcategory": "Computer Services"}], "href": "http://api.simplegeo.com/1.0/features/SG_1dnWbWIg8hX3VyfUKIDRz9_53.339347_-6.250848@1308163237.json", "address": "78 Merrion Square", "owner": "simplegeo", "postcode": "Dublin2"}}
]}

在您发布之后,我意识到我确实没有明确提出问题,所以我对其进行了编辑。我真的很想将数据转换为shapefile或其他标准GIS格式,以用于桌面GIS。对不起,措辞不好的问题,但感谢您的回答@fod。
RyanKDalton

2
fod的答案将使您半途而废。您将需要对所有这些转储进行预处理,以按照建议的方式将要素包装在FeatureCollection中,并以逗号分隔。简单的方法是用,+换行符替换所有换行符(即\ n替换为\ n),然后通过脚本或通过文本编辑器手动将其包含在FeatureCollection中。将所有文件固定为正确的GeoJSON后,即可使用ogr2​​ogr v1.8.0或更高版本将GeoJSON转换为shapefile。
2011年

优秀!我没有意识到这将使它们“可读”。使用上述方法,我能够通过QGIS直接读取文件。谢谢一群!我使用墨西哥数据集作为一个很好的样本,因为它只有9k的文件大小。现在解决“搜索并替换”美国文件@ 7.4 GB的问题。
2011年

抱歉-我没有时间跟进,但仅供参考,您可以直接在QGIS中打开GeoJSON文件-无需转换为shapefile。然后,如果您确实需要shapefile,则可以以该格式导出图层(Layer-> Save As ...)。
2011年

我尝试的第一件事是直接在QGIS中打开文件。问题在于所有数据都“包装”在一条记录中,因此只有一点。为了让QGIS识别数据集中的每个单独的特征,我需要遵循上面剩下的说明。
RyanKDalton 2011年

4

非常感谢@fod和@Sasa Ivetic将我带入正确的轨道!我不得不将这个项目搁置一会儿,但今天终于回到了这个项目,并希望通过我的研究结果来帮助其他可能为此感到苦恼的人。

使用他们在@fod答案中提供的信息,我编写了此Python脚本,以“正确的” geojson格式转换转储文件。这个py脚本会将数据转换为ogr2ogr可以读取的格式,然后您可以将其转换为所需的任何格式。

infile = sys.argv[1]
outfile = sys.argv[2]


## Prepare the input/output for read/write of files
fin = open(infile, 'r')
fout = open(outfile, 'w')


##Prepend the new file with approriate header info
fout.write('{"type":"FeatureCollection","features":[' + '\n')


## Read each line from the input and write to the output
for line in fin:
    ##write each line in the table, and replace carriage returns with "," + carriage return
    fout.write(line.replace("\n",",\n"))

##Append the new file with approriate footer info
fout.write(']}')

##Close the input and output files to release file locking
fin.close()
fout.close()

注意:由于操作系统内存的限制,您可能无法通过ogr2ogr转换转换后的geojson文件。看看此相关的问题:gis.stackexchange.com/questions/16307/...
RyanKDalton

太好了!Microsoft具有内存限制

1

您可以尝试FME执行此操作。它读取GeoJSON并编写Shape,并且-更重要的是-具有一堆用于处理JSON的“变压器”(JSONExploder,JSONFlattener,JSONExtractor)。因此,我认为将内容转换成可用格式会有所帮助。

它还提供免费试用!

注意:我确实为FME的制造商Safe Software工作。


是否有一些示例工作区显示如何从geojson写入shp?
kflaw
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.