diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json
index 273c291c..bd7dcec7 100644
--- a/app/src/main/assets/omdb_config.json
+++ b/app/src/main/assets/omdb_config.json
@@ -167,6 +167,22 @@
 					}
 				]
 			},
+			"3002":{
+				"table": "OMDB_OBJECT_TEXT",
+				"code": 3002,
+				"name": "文字",
+				"zoomMin": 15,
+				"zoomMax": 20,
+				"transformer2Code": ""
+			},
+			"3003":{
+				"table": "OMDB_OBJECT_SYMBOL",
+				"code": 3003,
+				"name": "符号",
+				"zoomMin": 15,
+				"zoomMax": 20,
+				"transformer2Code": ""
+			},
 			"3005":{
 				"table": "OMDB_TRAFFIC_SIGN",
 				"code": 3005,
@@ -211,7 +227,7 @@
 				"table": "OMDB_CROSS_WALK",
 				"code": 3014,
 				"name": "人行横道",
-				"zoomMin": 18,
+				"zoomMin": 15,
 				"zoomMax": 20
 			},
 			"3016":{
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt
index eeafd079..9539a3f1 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt
@@ -129,7 +129,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
                     // 定位到指定位置
                     niMapController.mMapView.vtmMap.animator()
 //                        .animateTo(GeoPoint( 40.05108004733645, 116.29187746293708    ))
-                        .animateTo(GeoPoint( 40.45250049995882, 115.85967482434108 ))
+                        .animateTo(GeoPoint( 40.480633792652746, 115.99816629572948 ))
                 }
                 R.id.personal_center_menu_open_all_layer -> {
                     MapParamUtils.setDataLayerEnum(DataLayerEnum.SHOW_ALL_LAYERS)
diff --git a/collect-library/resources/rendertheme.xsd b/collect-library/resources/rendertheme.xsd
index 52a05322..9f23ffe0 100644
--- a/collect-library/resources/rendertheme.xsd
+++ b/collect-library/resources/rendertheme.xsd
@@ -147,6 +147,8 @@
         <xs:attribute name="repeat" default="true" type="xs:boolean" use="optional"/>
         <!-- 长边坐标轴,默认为s -->
         <xs:attribute name="longEdge" type="tns:text" default="s"/>
+        <!-- 是否包含方向,默认为false -->
+        <xs:attribute name="hasDirect" default="false" type="xs:boolean" use="optional" />
     </xs:complexType>
 
     <xs:complexType name="caption">
diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml
index 79440e2f..45f4d66f 100644
--- a/collect-library/src/main/assets/editormarker.xml
+++ b/collect-library/src/main/assets/editormarker.xml
@@ -1491,10 +1491,10 @@
     </m>
 
     <m k="qi_table">
-<!--        &lt;!&ndash; 道路线 &ndash;&gt;-->
-<!--        <m v="OMDB_RD_LINK">-->
-<!--            <line stroke="#9c9c9c" width="1" />-->
-<!--        </m>-->
+        <!-- 道路线 -->
+        <m v="OMDB_RD_LINK">
+            <line stroke="#9c9c9c" width="1" />
+        </m>
 
         <!--道路种别-->
         <m v="OMDB_RD_LINK_KIND">
@@ -2330,10 +2330,18 @@
 <!--            <area use="obj-area" repeat="false"></area>-->
 <!--            <symbol src="assets:omdb/icon_fill_area_3012.svg"></symbol>-->
         </m>
+        <!-- 文字 -->
+        <m v="OMDB_OBJECT_TEXT">
+            <area use="obj-area" repeat="false" src="@text-src:textString" longEdge="t" hasDirect="true"></area>
+        </m>
+        <!-- 符号 -->
+        <m v="OMDB_OBJECT_SYMBOL">
+            <area use="obj-area" repeat="false" src="assets:omdb/tex_fill_area_3012.png" longEdge="t" hasDirect="true"></area>
+        </m>
 
         <!-- 人行横道 -->
         <m v="OMDB_CROSS_WALK">
-            <area use="obj-area" fill="#00000000" stroke="#00000000" repeat="true" src="assets:omdb/tex_fill_area_3014_4.svg" longEdge="s"></area>
+            <area use="obj-area" stroke="#00000000" repeat="true" src="assets:omdb/tex_fill_area_3014_3.png" longEdge="s"></area>
         </m>
 
         <!-- 道路施工 -->
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt
index fbf22a22..ff17f5f2 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt
+++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LayerManagerHandler.kt
@@ -6,6 +6,7 @@ import com.navinfo.collect.library.data.entity.RenderEntity
 import com.navinfo.collect.library.map.NIMapView
 import com.navinfo.collect.library.map.source.MapLifeNiLocationTileSource
 import com.navinfo.collect.library.map.source.NavinfoMultiMapFileTileSource
+import com.navinfo.collect.library.map.source.NavinfoTileThemeHook
 import com.navinfo.collect.library.map.source.OMDBReferenceTileSource
 import com.navinfo.collect.library.map.source.OMDBTileSource
 import com.navinfo.collect.library.system.Constant
@@ -57,6 +58,8 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView, traceP
 
     private val omdbTileSource by lazy { OMDBTileSource() }
     private val omdbReferenceTileSource by lazy { OMDBReferenceTileSource() }
+    private val labelTileLoaderHook = LabelTileLoaderHook()
+    private val navinfoTileThemeHook = NavinfoTileThemeHook()
 
     init {
         initMap()
@@ -76,7 +79,7 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView, traceP
         vectorNiLocationTileLayer = VectorTileLayer(mMapView.vtmMap, mapLifeNiLocationTileSource)
 
         labelNiLocationLayer =
-            LabelLayer(mMapView.vtmMap, vectorNiLocationTileLayer, LabelTileLoaderHook())
+            LabelLayer(mMapView.vtmMap, vectorNiLocationTileLayer, labelTileLoaderHook)
 
         if (vectorNiLocationTileLayer != null) {
             addLayer(vectorNiLocationTileLayer, NIMapView.LAYER_GROUPS.BASE)
@@ -114,7 +117,7 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView, traceP
         omdbReferenceLabelLayer = LabelLayer(
             mMapView.vtmMap,
             omdbReferenceTileLayer,
-            LabelTileLoaderHook()
+            labelTileLoaderHook
         )
         if (omdbReferenceTileLayer != null) {
             addLayer(omdbReferenceTileLayer, NIMapView.LAYER_GROUPS.VECTOR_TILE)
@@ -127,7 +130,7 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView, traceP
         omdbLabelLayer = LabelLayer(
             mMapView.vtmMap,
             omdbVectorTileLayer,
-            LabelTileLoaderHook()
+            labelTileLoaderHook
         )
         if (omdbVectorTileLayer != null) {
             addLayer(omdbVectorTileLayer, NIMapView.LAYER_GROUPS.VECTOR_TILE)
@@ -135,6 +138,9 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView, traceP
         if (omdbLabelLayer != null) {
             addLayer(omdbLabelLayer, NIMapView.LAYER_GROUPS.LABEL)
         }
+        // 向两个Vector图层增加hook钩子,加载数据前对style或数据进行二次处理
+        omdbVectorTileLayer.addHook(navinfoTileThemeHook)
+        omdbReferenceTileLayer.addHook(navinfoTileThemeHook)
     }
 
     private fun resetOMDBVectorTileLayer() {
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/NavinfoTileThemeHook.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/NavinfoTileThemeHook.java
new file mode 100644
index 00000000..6be00dc7
--- /dev/null
+++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/NavinfoTileThemeHook.java
@@ -0,0 +1,73 @@
+package com.navinfo.collect.library.map.source;
+
+import org.oscim.core.MapElement;
+import org.oscim.layers.tile.MapTile;
+import org.oscim.layers.tile.vector.VectorTileLayer;
+import org.oscim.renderer.bucket.RenderBuckets;
+import org.oscim.theme.styles.RenderStyle;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *  数据在加载前对MapElement做处理
+ *
+ * */
+public class NavinfoTileThemeHook implements VectorTileLayer.TileLoaderThemeHook {
+    // 缓存样式,如果存在相同的文字图片,从缓存直接获取
+    private Map<String, RenderStyle> styleMap = new HashMap<>();
+
+    @Override
+    public boolean process(MapTile tile, RenderBuckets buckets, MapElement element, RenderStyle style, int level) {
+//        if (style instanceof AreaStyle) {
+//            AreaStyle area = (AreaStyle) style;
+//            if (area.src!=null&&area.texture==null) {
+//                String textValue = null;
+//                if (area.src.startsWith("@text-src:")) {
+//                    String tagKey = area.src.replace("@text-src:", "");
+//                    // 根据配置的tagKey获取对应的文字值
+//                    textValue = element.tags.getValue(tagKey);
+//                } else if (area.src.startsWith("@text:")) {
+//                    // 构建一个文字图片
+//                    textValue = area.src.substring(5);
+//                }
+//
+//                // 使用文本值生成纹理图片
+//                if (textValue==null) {
+//                    return false;
+//                }
+//
+//                // 根据引用字段,生成新的style样式
+//                RenderStyle cacheStyle = styleMap.get(textValue);
+//                if (cacheStyle!=null) {
+//                    style.set(cacheStyle);
+//                } else { // 不存在缓存style,需要按照文字生成对应的图片纹理
+//                    AreaStyle.AreaBuilder<?> builder = new AreaStyle.AreaBuilder();
+//                    builder.set((AreaStyle) style);
+//                    // 构建一个文字图片
+//                    Canvas canvas = CanvasAdapter.newCanvas();
+//                    Paint paint = CanvasAdapter.newPaint();
+//                    paint.setColor(Color.WHITE);
+//                    paint.setTextSize(15);
+//
+//                    Bitmap bitmap = CanvasAdapter.newBitmap(Math.round(paint.getTextWidth(textValue)+10), Math.round(paint.getTextHeight(textValue)+10), 0);
+//                    canvas.setBitmap(bitmap);
+//                    canvas.drawText(textValue, 5
+//                            , 5+paint.getTextHeight(textValue), paint, paint);
+//                    builder.texture = new TextureItem(Utils.potBitmap(bitmap), area.repeat);
+//                    builder.src = null; // 清空原有的带@的src配置
+//                    area = builder.build();
+//                    styleMap.put(textValue, area);
+//                    style.set(area);
+//                }
+//            }
+//        }
+//        style.update();
+        return false; // 如果返回true,后续的hook将不会执行
+    }
+
+    @Override
+    public void complete(MapTile tile, boolean success) {
+
+    }
+}