先來個Polygon(包括MultiPolygon)轉GeoJson的,最近有點忙,等有空加上其他的:
function processPolygonString2PolygonArray(polygonString, proj) {
var geoJson = {};
if (polygonString.startsWith("MULTIPOLYGON")) {
// 多面
geoJson["type"] = "MultiPolygon";
var firstLeftIndex = polygonString.indexOf('(');
var lastRightIndex = polygonString.indexOf(')');
// 去掉首尾括号
var str = polygonString.substring(firstLeftIndex + , polygonString.length - ); // ((),(),()) , ((),(),()) , ((),(),())
// console.log(str);
var pArray = new Array();
var polygonArray = str.split(")),((");
for (var i = ; i < polygonArray.length; i++) {
var pStr = polygonArray[i];//每個polygon的String
if (polygonArray.length === ) {//如果隻有1個,說明沒有被分割
// 去掉第一個( 去掉結尾)
pStr = pStr.substring(, pStr.length - );
} else if (i === ) {
// 第一個,去第一個( 補結尾加上 )
pStr = pStr.substring(, pStr.length) + ")"; // (),(),() 環的集合
}
else if (i === polygonArray.length - ) {
// 最後一個: 補第一個( , 去 最後一個)
pStr = "(" + pStr.substring(, pStr.length - );
} else {
// 中間,補第一個( 補最後一個 )
pStr = "(" + pStr + ")";
}
// pStr 表示 () , () ,() 線環集合
// 分割環
var rArray = new Array();
var ringsArray = pStr.split("),(");
for (var j = ; j < ringsArray.length; j++) {
var ringStr = ringsArray[j];
if (ringsArray.length === ) {
// 去掉第一個( 去掉結尾 )
ringStr = ringStr.substring(, ringStr.length - );
} else if (j === ) { // 如果是第一個
// 去掉第一個(
ringStr = ringStr.substring(, ringStr.length);
} else if (j === ringsArray.length - ) {// 最後一個
// 去掉結尾 )
ringStr = ringStr.substring(, ringStr.length - );
}
// 再按逗号分割就是點集合
var ptsArray = new Array();
var pointArr = ringStr.split(",");
for (var k = ; k < pointArr.length; k++) {
var pt_arr = pointArr[k].split(" ");
var proj_arr = proj4(proj).inverse([pt_arr[], pt_arr[]]);
ptsArray.push(proj_arr);
}
rArray.push(ptsArray);
}
pArray.push(rArray);
}
//console.log(JSON.stringify(pArray));
geoJson["coordinates"] = pArray;
} else if (polygonString.startsWith("POLYGON")) {
// 面,其中有可能有環
geoJson["type"] = "Polygon";
var firstLeftIndex = polygonString.indexOf('(');
var lastRightIndex = polygonString.indexOf(')');
// 去掉首尾括号
var str = polygonString.substring(firstLeftIndex + , polygonString.length - ); // (),(),()
var rArray = new Array();
var ringsArray = str.split("),(");
for (var j = ; j < ringsArray.length; j++) {
var ringStr = ringsArray[j];
if (ringsArray.length === ) {
// 去掉第一個( 去掉結尾 )
ringStr = ringStr.substring(, ringStr.length - );
} else if (j === ) { // 如果是第一個
// 去掉第一個(
ringStr = ringStr.substring(, ringStr.length);
} else if (j === ringsArray.length - ) {// 最後一個
// 去掉結尾 )
ringStr = ringStr.substring(, ringStr.length - );
}
// 再按逗号分割就是點集合
var ptsArray = new Array();
var pointArr = ringStr.split(",");
for (var k = ; k < pointArr.length; k++) {
var pt_arr = pointArr[k].split(" ");
var proj_arr = proj4(proj).inverse([pt_arr[], pt_arr[]]);
ptsArray.push(proj_arr);
}
rArray.push(ptsArray);
}
geoJson["coordinates"] = rArray;
}
return geoJson;
}
參考資料:
http://www.oschina.net/translate/geojson-spec#coordinate-reference-system-objects
http://blog.csdn.net/arenn/article/details/54907545
http://www.cnblogs.com/marsprj/archive/2013/02/08/2909452.html