不能。geojson是rfc 7946规范的数据格式,非可安装库;需用stefanfischer/json-geojson等类库解析,先json_decode()再fromarray(),注意坐标顺序、大小写及utf-8编码。

Composer 能否直接安装 GeoJSON 官方库?
不能。GeoJSON 是一种数据格式规范(RFC 7946),不是可执行的 PHP 库,所以 composer require geojson 会报错:Package geojson not found。你真正需要的是能解析、验证、生成 GeoJSON 的 PHP 类库,比如 geojson/geojson(由 jms/serializer 生态衍生)或更轻量的 stefanfischer/json-geojson。
推荐用 stefanfischer/json-geojson 解析和构造简单 GeoJSON
它不依赖大型框架,专注读写标准 GeoJSON 对象,适合大多数地理坐标点、线、面操作场景。安装命令:
composer require stefanfischer/json-geojson
使用时注意三点:
-
StefanFischer\GeoJson\FeatureCollection和Feature需手动 new,不能直接从 JSON 字符串反序列化(它不提供自动映射) - 必须先用
json_decode($json, true)解析原始字符串,再传给FeatureCollection::fromArray() - 坐标顺序必须是
[longitude, latitude](GeoJSON 规范要求),若你数据是[lat, lng],需提前交换
示例:加载一个含 Point 的 GeoJSON 字符串
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
$json = '{"type":"Feature","geometry":{"type":"Point","coordinates":[116.4,39.9]},"properties":{"name":"Beijing"}}';
$data = json_decode($json, true);
$feature = \StefanFischer\GeoJson\Feature::fromArray($data);
echo $feature->getGeometry()->getType(); // 输出 "Point"
遇到 TypeError: Argument 1 passed to ... expects array, null given 怎么办?
这是最常见错误,根本原因是输入 JSON 格式不合规,json_decode() 返回 null,后续调用 fromArray() 就崩了。排查步骤:
- 用
json_last_error()检查解码失败原因,常见是 UTF-8 BOM 或换行符污染 - 确保顶层结构是
Feature或FeatureCollection,不是Geometry单独对象(该库不支持直接解析 Geometry) - 字段名大小写必须严格匹配:是
"type"不是"Type",是"coordinates"不是"coordinate" - 如果数据来自外部 API,先用
trim()去首尾空白,再用mb_convert_encoding($str, 'UTF-8', 'auto')统一编码
需要坐标计算(如距离、相交)怎么办?
stefanfischer/json-geojson 只做格式转换,不提供空间分析能力。真要算两点距离、判断点是否在多边形内,得搭配其他库:
- 轻量级选
phpgeo/phpgeo:支持 Haversine 距离、Point-in-Polygon,API 简单,无额外依赖 - 生产级复杂运算(缓冲区、联合、差集)用
brick/math+ 自定义几何算法,或导出 WKT 后交给 PostGIS 处理 - 别把
geojson/geojson当万能方案——它重度依赖jms/serializer,配置繁琐,且对嵌套properties支持不稳定
一个容易被忽略的细节:GeoJSON 中 Polygon 的第一个环必须是外环,且顶点按逆时针排列(遵循右手定则),否则 phpgeo 的 isPointInPolygon() 可能返回相反结果。










