Я действительно работал над этой же проблемой последние несколько недель.Важно отметить: я не использую геопространственную базу данных, я просто использую обычное хранилище (точнее, MySQL).
Вот как я это сделал (без грязных операторов concat):
Описание таблицы SQL:
CREATE TABLE IF NOT EXISTS `conditions` (
`conditionsID` int(10) unsigned NOT NULL auto_increment,
`ICAO` varchar(4) default NULL,
`LOCATION` varchar(50) default NULL,
`LATITUDE` float default NULL,
`LONGITUDE` float default NULL,
`TEMPERATURE` float default NULL,
`TEMPERATURE_F` float default NULL,
`TEMPERATURE_C` float default NULL,
`FEELS_LIKE` float default NULL,
PRIMARY KEY (`conditionsID`),
KEY `ICAO` (`ICAO`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=56274738 ;
Затем я могу использовать библиотеку PHP json_encode (впервые доступна в 5.2, улучшенные опции для 5.3) для кодирования объекта json из объекта PHP.Больше не нужно работать со строками, вместо этого я могу работать с псевдообъектами (я предпочитаю массивы, которыми легко управлять на лету).5.3 также предоставляет возможность красивой печати.
Код моего PHP-сервера:
$feature_collection = array();
$feature_collection['type'] = "FeatureCollection";
$feature_collection['features'] = array();
$con = mysql_connect($DB_URI, $DB_USER, $DB_PASS);
if (!$con) {
$errorMessage = "Error: Could not connect to data database. Error: " . mysql_error();
} else {
mysql_select_db("data", $con);
$result = mysql_query("SELECT * FROM `conditions` WHERE LATITUDE > $LAT AND LONGITUDE > $LON GROUP BY LOCATION;");
while ($row = mysql_fetch_assoc($result)) {
$feature_collection['features'][] = createFeature($row['conditionsID'],
$row['LATITUDE'],
$row['LONGITUDE'],
$row);
}
}
echo json_encode($feature_collection);
function createFeature($ID, $lat, $lon, $data)
{
unset($data["LATITUDE"]);
unset($data["LONGITUDE"]);
$feature = array();
$feature["type"] = "Feature";
$feature["id"] = $ID;
$feature["geometry"] = array();
$feature["geometry"]["type"] = "Point";
$feature["geometry"]["coordinates"] = array($lon+0, $lat+0);
$feature["properties"] = $data;
$feature["properties"]["visible"] = "true";
return $feature;
}
Обратите внимание на функцию FeatureCreate, которая позволяет быстро создавать функции.Также обратите внимание, что я добавляю почти всю строку в объект свойств.Overkill / Redundant, но упрощает код.
Надеюсь, этот фрагмент поможет.Это делает мою работу (и я был бы рад выслушать предложения других).